关于make时,通过-j参数指定多线程数目
之前在折腾crosstool-ng:
【记录】crosstool为xscale编译(ct-ng build)过程
时,就偶尔看到别人用
ct-ng build.4
意思是多线程去编译
估计底层就是调用的makefile的支持多线程的这个功能。
后来又在别处看到类似的写法了:
Introduction to Cross Compilation
中的:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage -j4
此时,才想到,去查查make的参数:
(此处是在cygwin中)
Administrator@PC-20130611GART /cygdrive/e/Dev_Root $ make --help Usage: make [options] [target] ... Options: -b, -m Ignored for compatibility. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -d Print lots of debugging information. --debug[=FLAGS] Print various types of debugging information. -e, --environment-overrides Environment variables override makefiles. --eval=STRING Evaluate STRING as a makefile statement. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -L, --check-symlink-times Use the latest mtime between symlinks and target. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -R, --no-builtin-variables Disable the built-in variable settings. -s, --silent, --quiet Don't echo recipes. -S, --no-keep-going, --stop Turns off -k. -t, --touch Touch targets instead of remaking them. --trace Print tracing information. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. --no-print-directory Turn off -w, even if it was turned on implicitly. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. --warn-undefined-variables Warn when an undefined variable is referenced. This program built for i686-pc-cygwin Report bugs to <[email protected]> Administrator@PC-20130611GART /cygdrive/e/Dev_Root $
果然对应的-j==–jobs,指的是多线程的意思:
-j [N], –jobs[=N] Allow N jobs at once; infinite jobs with no arg. |
用法即:
make –j 4
或
make –jobs=4
make加上-s,表示silent,不输出详细log信息
之前折腾:
【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs
参考的:
中就用到:
sudo make install -s make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- versatile_defconfig -s make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage -s
其中的-s参数,之前就猜测是silent的意思。
根本上面的–help输出的信息,果然是:
-s, –silent, –quiet Don’t echo recipes. |
-f指定makefile文件
之前就知道的,可以通过-f指定特定的makefile文件的。
背景是:
当执行make时,默认会去(当前文件夹下)找名为Makefile的文件
如果此处你需要去运行特定文件名的makefile文件,比如my.mk
那么就可以通过-f去指定:
make –f my.mk
即可。
make help可以用来查看当前支持哪些目标
一般来说,多数的makefile文件,除了最常见的make all,make clean等最常见的目标之外,往往都会有自己不同的目标供执行,即:
make xxx
make yyy
等等。
而想要去查看,有哪些xxx和yyy供你使用,可以通过make help去查看。
举例:
最近折腾的:
【记录】Ubuntu下为QEMU的arm平台交叉编译BusyBox
中的make help的输出,就是:
crifan@ubuntu:busybox-1.16.0$ make help Cleaning: clean - delete temporary files created by build distclean - delete all non-source files (including .config) doc-clean - delete all generated documentation Build: all - Executable and documentation busybox - the swiss-army executable doc - docs/BusyBox.{txt,html,1} html - create html-based cross-reference Configuration: allnoconfig - disable all symbols in .config allyesconfig - enable all symbols in .config (see defconfig) config - text based configurator (of last resort) defconfig - set .config to largest generic configuration menuconfig - interactive curses-based configurator oldconfig - resolve any unresolved symbols in .config hosttools - build sed for the host. You can use these commands if the commands on the host is unusable. Afterwards use it like: make SED="/home/crifan/develop/embedded/qemu/rootfs/busybox/busybox-1.16.0/sed" Installation: install - install busybox into CONFIG_PREFIX uninstall Development: baseline - create busybox_old for bloatcheck. bloatcheck - show size difference between old and new versions check - run the test suite for all applets checkhelp - check for missing help-entries in Config.in randconfig - generate a random configuration release - create a distribution tarball sizes - show size of all enabled busybox symbols objsizes - show size of each .o object built bigdata - show data objects, biggest first stksizes - show stack users, biggest first
如此,就知道了:
当前的busybox的makefile中,支持如此多的目标,而想要查看当前busybox的各种stack信息,就可以去试试那个stksizes了:
crifan@ubuntu:busybox-1.16.0$ make ARCH=arm CROSS_COMPILE=arm-xscale-linux-gnueabi- stksizes arm-xscale-linux-gnueabi-objdump -d busybox_unstripped | /home/crifan/develop/embedded/qemu/rootfs/busybox/busybox-1.16.0/scripts/checkstack.pl arm | uniq buffered_vfprintf [busybox_unstripped]: 8384 phys_pages_info [busybox_unstripped]: 8192 __get_nprocs [busybox_unstripped]: 8192 __res_vinit [busybox_unstripped]: 8192 _IO_wfile_seekoff [busybox_unstripped]: 4224 __unix_grantpt [busybox_unstripped]: 4224 _IO_vfwprintf [busybox_unstripped]: 4224 grantpt [busybox_unstripped]: 4160 bb_full_fd_action [busybox_unstripped]: 4096 find_list_entry2 [busybox_unstripped]: 4096 readlink_main [busybox_unstripped]: 4096 pid_is_exec [busybox_unstripped]: 4096 execle [busybox_unstripped]: 4096 execl [busybox_unstripped]: 4096 execlp [busybox_unstripped]: 4096 _dl_get_origin [busybox_unstripped]: 4096 ipaddr_list_or_flush [busybox_unstripped]: 3664 iproute_list_or_flush [busybox_unstripped]: 3648 __c32 [busybox_unstripped]: 3600 buffered_vfprintf [busybox_unstripped]: 3302 __mpatan [busybox_unstripped]: 2976 fallbackSort [busybox_unstripped]: 2928 atan2Mp.constprop.0 [busybox_unstripped]: 2304 __mpsqrt [busybox_unstripped]: 2304 __slowpow [busybox_unstripped]: 2304 cal_main [busybox_unstripped]: 2288 internal_fnmatch [busybox_unstripped]: 2144 doCommands [busybox_unstripped]: 2112 __slowexp [busybox_unstripped]: 1984 __mpexp [busybox_unstripped]: 1984 normalized [busybox_unstripped]: 1968 get_next_block [busybox_unstripped]: 1968 identify_from_stdin [busybox_unstripped]: 1792 __ieee754_log [busybox_unstripped]: 1648 huft_build [busybox_unstripped]: 1488 iproute_modify [busybox_unstripped]: 1376 svc_getreq_common [busybox_unstripped]: 1328 __mpatan2 [busybox_unstripped]: 1312 inflate_block [busybox_unstripped]: 1296 _IO_vfprintf [busybox_unstripped]: 1296 __libc_message [busybox_unstripped]: 1280 getlogin_r [busybox_unstripped]: 1280 mainQSort3.constprop.2 [busybox_unstripped]: 1264 __gettextparse [busybox_unstripped]: 1248 iproute_get [busybox_unstripped]: 1184 rx_main [busybox_unstripped]: 1152 ether_wake_main [busybox_unstripped]: 1152 procps_scan [busybox_unstripped]: 1152 unwind_phase2_forced [busybox_unstripped]: 1152 build_trtable [busybox_unstripped]: 1126 wget_main [busybox_unstripped]: 1120 iprule_modify [busybox_unstripped]: 1120 getopt32 [busybox_unstripped]: 1104 _svcauth_des [busybox_unstripped]: 1088 two_way_long_needle [busybox_unstripped]: 1056 ether_hostton [busybox_unstripped]: 1056 check_existence_through_netlink [busybox_unstripped]: 1040 two_way_long_needle [busybox_unstripped]: 1040 clnt_sperror [busybox_unstripped]: 1040 clnt_spcreateerror [busybox_unstripped]: 1040 _dl_signal_error [busybox_unstripped]: 1040 internal_fnwmatch [busybox_unstripped]: 1030 bad_zone [busybox_unstripped]: 1024 get_dirsize [busybox_unstripped]: 1024 map_block2 [busybox_unstripped]: 1024 map_block [busybox_unstripped]: 1024 addLines [busybox_unstripped]: 1024 getNum [busybox_unstripped]: 1024 perror_internal [busybox_unstripped]: 1024 __getmntent_r [busybox_unstripped]: 1024 __mpsin [busybox_unstripped]: 996 __mpcos [busybox_unstripped]: 996 __mpsin1 [busybox_unstripped]: 992 __mpcos1 [busybox_unstripped]: 992 __sin32 [busybox_unstripped]: 988 __cos32 [busybox_unstripped]: 988 __mpranred [busybox_unstripped]: 988 __mplog [busybox_unstripped]: 984 udhcpc_main [busybox_unstripped]: 884 dhcprelay_main [busybox_unstripped]: 836 udhcpd_main [busybox_unstripped]: 824 sha512_process_block128 [busybox_unstripped]: 812 glob_in_dir [busybox_unstripped]: 804 init_exec [busybox_unstripped]: 788 write_wtmp [busybox_unstripped]: 780 nfsmount [busybox_unstripped]: 732 do_tunnels_list [busybox_unstripped]: 724 print_tunnel [busybox_unstripped]: 712 pututline_file [busybox_unstripped]: 708 if_readlist_proc [busybox_unstripped]: 696 udhcp_send_raw_packet [busybox_unstripped]: 692 arp_show [busybox_unstripped]: 684 __inv [busybox_unstripped]: 664 __gnu_Unwind_Backtrace [busybox_unstripped]: 664 udhcp_recv_raw_packet [busybox_unstripped]: 660 print_login_issue [busybox_unstripped]: 656 send_ACK [busybox_unstripped]: 644 send_release [busybox_unstripped]: 644 send_offer [busybox_unstripped]: 640 send_renew [busybox_unstripped]: 640 send_NAK [busybox_unstripped]: 636 send_discover [busybox_unstripped]: 636 send_inform [busybox_unstripped]: 632 send_decline [busybox_unstripped]: 632 send_select [busybox_unstripped]: 632 ash_main [busybox_unstripped]: 632 dnsd_main [busybox_unstripped]: 604 _dl_start_profile [busybox_unstripped]: 604 sha_crypt [busybox_unstripped]: 596 __gnu_Unwind_RaiseException [busybox_unstripped]: 580 _dl_map_object [busybox_unstripped]: 580 inetd_main [busybox_unstripped]: 576 readtoken1 [busybox_unstripped]: 572 _dl_debug_vdprintf [busybox_unstripped]: 556 process_dev [busybox_unstripped]: 544 get_header_tar [busybox_unstripped]: 540 uname_main [busybox_unstripped]: 540 last_main [busybox_unstripped]: 532 glob_in_dir [busybox_unstripped]: 532 dir_act [busybox_unstripped]: 524 retrieve_file_data [busybox_unstripped]: 524 log_option [busybox_unstripped]: 524 gaih_inet [busybox_unstripped]: 520 readprofile_main [busybox_unstripped]: 516 writeTarHeader [busybox_unstripped]: 516 _IO_vfscanf [busybox_unstripped]: 516 handle_net_output [busybox_unstripped]: 512 writeLongname [busybox_unstripped]: 512 getnameinfo [busybox_unstripped]: 484 print_addrinfo [busybox_unstripped]: 480 _nl_load_locale_from_archive [busybox_unstripped]: 460 read_alias_file [busybox_unstripped]: 460 _dl_discover_osversion [busybox_unstripped]: 460 authunix_create [busybox_unstripped]: 456 login_main [busybox_unstripped]: 452 print_route [busybox_unstripped]: 444 evalfun [busybox_unstripped]: 440 _dl_catch_error [busybox_unstripped]: 440 brctl_main [busybox_unstripped]: 420 evalbltin.isra.1 [busybox_unstripped]: 420 evaltree [busybox_unstripped]: 420 setvarsafe [busybox_unstripped]: 416 redirectsafe [busybox_unstripped]: 416 crond_main [busybox_unstripped]: 412 modprobe_main [busybox_unstripped]: 412 ipaddr_modify [busybox_unstripped]: 412 scan_proc_net [busybox_unstripped]: 412 _Unwind_VRS_Pop [busybox_unstripped]: 412 __sleep [busybox_unstripped]: 408 ____strtod_l_internal [busybox_unstripped]: 404 exitshell [busybox_unstripped]: 404 bb_ask [busybox_unstripped]: 404 get_linux_version_code [busybox_unstripped]: 396 safe_gethostname [busybox_unstripped]: 396 safe_getdomainname [busybox_unstripped]: 396 getdomainname [busybox_unstripped]: 396 runsv_main [busybox_unstripped]: 392 __gethostname [busybox_unstripped]: 392 update_utmp [busybox_unstripped]: 384 print_rule [busybox_unstripped]: 384 parse_config_file [busybox_unstripped]: 380 reread_config_file [busybox_unstripped]: 380 set_loop [busybox_unstripped]: 380 fbset_main [busybox_unstripped]: 372 find_block_device [busybox_unstripped]: 372 arping_main [busybox_unstripped]: 364 _IO_vdprintf [busybox_unstripped]: 364 md5_crypt [busybox_unstripped]: 356 passwd_main [busybox_unstripped]: 348 __mbsrtowcs_l [busybox_unstripped]: 348 list_devs_in_proc_partititons [busybox_unstripped]: 344 sha1_process_block64 [busybox_unstripped]: 340 __glob64 [busybox_unstripped]: 340 display_process_list [busybox_unstripped]: 332 __wcsrtombs [busybox_unstripped]: 332 INET6_displayroutes [busybox_unstripped]: 328 __dvd [busybox_unstripped]: 328 mainSort [busybox_unstripped]: 324 __mbsnrtowcs [busybox_unstripped]: 324 __ttyname_r [busybox_unstripped]: 324 glob [busybox_unstripped]: 324 sulogin_main [busybox_unstripped]: 316 makedevs_main [busybox_unstripped]: 316 re_compile_fastmap_iter.isra.40 [busybox_unstripped]: 316 do_lzo_decompress [busybox_unstripped]: 312 do_system [busybox_unstripped]: 312 do_lzo_compress [busybox_unstripped]: 308 updwtmp_file [busybox_unstripped]: 308 getutline_r_file [busybox_unstripped]: 308 correct_password [busybox_unstripped]: 304 __libc_start_main [busybox_unstripped]: 304 telnetd_main [busybox_unstripped]: 300 read_line_input [busybox_unstripped]: 300 re_search_internal [busybox_unstripped]: 300 internal_getut_r [busybox_unstripped]: 300 crifan@ubuntu:busybox-1.16.0$
5.
转载请注明:在路上 » 【整理】Linux下的make命令使用心得